package com.sisgesbyte.services.sistema;


import java.util.LinkedList;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.inject.Inject;

import com.sisgesbyte.common.ConstantesInternasSistema;
import com.sisgesbyte.common.Validaciones;
import com.sisgesbyte.dao.beanDao.AccesoLocalizacionDetRequest;
import com.sisgesbyte.dao.beanDao.FiltrosSQLBean;
import com.sisgesbyte.dao.seguridad.MantenimientoAccesoLocalalizacionDao;
import com.sisgesbyte.data.entity.comun.GenericEntity;
import com.sisgesbyte.data.entity.seguridad.AccesoLocalizacionListaEntity;
import com.sisgesbyte.services.commonBean.GenericResponse;
import com.sisgesbyte.services.sistema.bean.AccesoLocalizacionBean;
import com.sisgesbyte.services.sistema.bean.AccesoLocalizacionListaResponse;

@Stateless
public class MantenimientoAccesoLocalizacionImpl implements MantenimientoAccesoLocalizacion {

	@EJB
	private MantenimientoAccesoLocalalizacionDao mantenimientoAccesoLocalalizacionDao;
	
	@Inject
	private Validaciones validaciones;
	
	@Override
	public AccesoLocalizacionListaResponse listarAccesoLocalizacion( String codTransaccion,FiltrosSQLBean cadenaFiltros) {
		
		String mensajeTransaccionMetodo = "[listarAccesoLocalizacion idTx=" + codTransaccion + "] - ";
		AccesoLocalizacionListaResponse response = new AccesoLocalizacionListaResponse();
		
		try{
			List<AccesoLocalizacionListaEntity> daoAccesos = null;
			response.setIdTransaccion(codTransaccion);
			try{
				daoAccesos = mantenimientoAccesoLocalalizacionDao.listarAccesoLocalizacion(cadenaFiltros);
				
			}catch(Exception e){
				System.out.println(mensajeTransaccionMetodo + "Hubo un error al listar los AccesoLocalizacion de BD " +e);
				response.setCodigoRespuesta(ConstantesInternasSistema.LISTAR_ACCESOLOCALIZACION_COD_IDT46);
				response.setMensajeRespuesta(ConstantesInternasSistema.LISTAR_ACCESOLOCALIZACION_MSJ_IDT46);
				return response;
			}
			List<AccesoLocalizacionBean> lista = new LinkedList<AccesoLocalizacionBean>();
			if(daoAccesos.size() > 0){
				for(AccesoLocalizacionListaEntity row : daoAccesos){
					AccesoLocalizacionBean bean = new AccesoLocalizacionBean();
					bean.setActive(row.getActive());
					bean.setCiudad(validaciones.validarCamposString(row.getCiudad()));
					bean.setCiudadId(row.getCiudad_id());
					bean.setDivision(validaciones.validarCamposString(row.getDivision()));
					bean.setDivisionPaisId(row.getDivision_pais_id());
					bean.setId(row.getId());
					bean.setPais(validaciones.validarCamposString(row.getPais()));
					bean.setPaisId(row.getPais_id());
					bean.setUsuario(validaciones.validarCamposString(row.getUsuario()));
					bean.setUsuarioId(row.getUsuario_id());
					lista.add(bean);
					
				}
				
				response.setListaAccesoLocalizacion(lista);
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setListaAccesoLocalizacion(lista);
				response.setCodigoRespuesta(ConstantesInternasSistema.LISTAR_ACCESOLOCALIZACION_COD_IDF45);
				response.setMensajeRespuesta(ConstantesInternasSistema.LISTAR_ACCESOLOCALIZACION_MSJ_IDF45);
			}
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error en el proceso " + e);
			response.setCodigoRespuesta(ConstantesInternasSistema.LISTAR_ACCESOLOCALIZACION_COD_IDT46);
			response.setMensajeRespuesta(ConstantesInternasSistema.LISTAR_ACCESOLOCALIZACION_MSJ_IDT46);
			return response;
		}
		return response;
	}

	@Override
	public GenericResponse nuevoAccesoLocalizacion(String codTransaccion, AccesoLocalizacionBean accesoLocalizacion) {
		String mensajeTransaccionMetodo = "[nuevoAccesoLocalizacion idTx=" + codTransaccion + "] - ";
		GenericResponse response = new GenericResponse();
		
		try{
			GenericEntity daoAcceso = null;
			response.setIdTransaccion(codTransaccion);
			AccesoLocalizacionDetRequest newAccesoLocalizacion = new AccesoLocalizacionDetRequest();
			newAccesoLocalizacion.setActive(accesoLocalizacion.getActive());
			newAccesoLocalizacion.setCodCiudad(validaciones.validarCampoInteger(accesoLocalizacion.getCiudadId()));
			newAccesoLocalizacion.setCodDivision(validaciones.validarCampoInteger(accesoLocalizacion.getDivisionPaisId()));
			newAccesoLocalizacion.setCodPais(validaciones.validarCampoInteger(accesoLocalizacion.getPaisId()));
			newAccesoLocalizacion.setCodUsuario(validaciones.validarCampoInteger(accesoLocalizacion.getUsuarioId()));
			
			try{
				daoAcceso = mantenimientoAccesoLocalalizacionDao.guardarAccesoLocalizacion(newAccesoLocalizacion);
				
			}catch(Exception e){
				System.out.println(mensajeTransaccionMetodo + "Hubo un error al registrar  en BD");
				response.setCodigoRespuesta(ConstantesInternasSistema.NUEVO_ACCESOLOCALIZACION_COD_IDT47);
				response.setMensajeRespuesta(ConstantesInternasSistema.NUEVO_ACCESOLOCALIZACION_MSJ_IDT47);
				return response;
			}
			
			if(daoAcceso.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setCodigoRespuesta(ConstantesInternasSistema.NUEVO_ACCESOLOCALIZACION_COD_IDF46);
				response.setMensajeRespuesta(ConstantesInternasSistema.NUEVO_ACCESOLOCALIZACION_MSJ_IDF46);
			}

		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error en el proceso " +e);
			response.setCodigoRespuesta(ConstantesInternasSistema.NUEVO_ACCESOLOCALIZACION_COD_IDT47);
			response.setMensajeRespuesta(ConstantesInternasSistema.NUEVO_ACCESOLOCALIZACION_MSJ_IDT47);
			return response;
		}
				
		return response;
	}

	@Override
	public GenericResponse editAccesoLocalizacion(String codTransaccion, AccesoLocalizacionBean accesoLocalizacion) {
		String mensajeTransaccionMetodo = "[editAccesoLocalizacion idTx=" + codTransaccion + "] - ";
		GenericResponse response = new GenericResponse();
		try{
			GenericEntity daoAcceso = null;
			response.setIdTransaccion(codTransaccion);
			AccesoLocalizacionDetRequest editAccesoLocalizacion = new AccesoLocalizacionDetRequest();
			editAccesoLocalizacion.setActive(accesoLocalizacion.getActive());
			editAccesoLocalizacion.setCodCiudad(validaciones.validarCampoInteger(accesoLocalizacion.getCiudadId()));
			editAccesoLocalizacion.setCodDivision(validaciones.validarCampoInteger(accesoLocalizacion.getDivisionPaisId()));
			editAccesoLocalizacion.setCodPais(validaciones.validarCampoInteger(accesoLocalizacion.getPaisId()));
			editAccesoLocalizacion.setCodUsuario(validaciones.validarCampoInteger(accesoLocalizacion.getUsuarioId()));
			editAccesoLocalizacion.setId(accesoLocalizacion.getId());
			try{
				daoAcceso = mantenimientoAccesoLocalalizacionDao.actualizarAccesoLocalizacion(editAccesoLocalizacion);
				
			}catch(Exception e){
				System.out.println(mensajeTransaccionMetodo + "Hubo un error al editar  en BD");
				response.setCodigoRespuesta(ConstantesInternasSistema.EDIT_ACCESOLOCALIZACION_COD_IDT48);
				response.setMensajeRespuesta(ConstantesInternasSistema.EDIT_ACCESOLOCALIZACION_MSJ_IDT48);
				return response;
			}
			
			if(daoAcceso.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setCodigoRespuesta(ConstantesInternasSistema.EDIT_ACCESOLOCALIZACION_COD_IDF47);
				response.setMensajeRespuesta(ConstantesInternasSistema.EDIT_ACCESOLOCALIZACION_MSJ_IDF47);
			}

		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error en el proceso");
			response.setCodigoRespuesta(ConstantesInternasSistema.EDIT_ACCESOLOCALIZACION_COD_IDT48);
			response.setMensajeRespuesta(ConstantesInternasSistema.EDIT_ACCESOLOCALIZACION_MSJ_IDT48);
			return response;
		}
		
		return response;
	}

	@Override
	public GenericResponse deleteAccesoLocalizacion(String codTransaccion, int codAccesoLocalizacion) {
		String mensajeTransaccionMetodo = "[deleteAccesoLocalizacion idTx=" + codTransaccion + "] - ";
		GenericResponse response = new GenericResponse();
		
		try{
			GenericEntity daoAcceso = mantenimientoAccesoLocalalizacionDao.eliminarAccesoLocalizacion(codAccesoLocalizacion);
			
			if(daoAcceso.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setCodigoRespuesta(ConstantesInternasSistema.DELETE_ACCESOLOCALIZACION_COD_IDF48);
				response.setMensajeRespuesta(ConstantesInternasSistema.DELETE_ACCESOLOCALIZACION_MSJ_IDF48);
			}
			
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error al eliminar en BD ");
			response.setCodigoRespuesta(ConstantesInternasSistema.DELETE_ACCESOLOCALIZACION_COD_IDT49);
			response.setMensajeRespuesta(ConstantesInternasSistema.DELETE_ACCESOLOCALIZACION_MSJ_IDT49);
			return response;
		}
		
		return response;
	}

}
